mwan3_get_mwan3track_status()
{
- local track_ips pid
+ local interface=$1
+ local track_ips pid cmdline started
mwan3_list_track_ips()
{
track_ips="$1 $track_ips"
}
- config_list_foreach "$1" track_ip mwan3_list_track_ips
-
- if [ -n "$track_ips" ]; then
- pid="$(pgrep -f "mwan3track $1$")"
- if [ -n "$pid" ]; then
- if [ "$(cat /proc/"$(pgrep -P $pid)"/cmdline)" = "sleep${MAX_SLEEP}" ]; then
- tracking="paused"
- else
- tracking="active"
- fi
- else
- tracking="down"
- fi
- else
- tracking="disabled"
+ config_list_foreach "$interface" track_ip mwan3_list_track_ips
+
+ if [ -z "$track_ips" ]; then
+ echo "disabled"
+ return
+ fi
+ readfile pid $MWAN3TRACK_STATUS_DIR/$interface/PID 2>/dev/null
+ if [ -z "$pid" ]; then
+ echo "down"
+ return
+ fi
+ readfile cmdline /proc/$pid/cmdline 2>/dev/null
+ if [ $cmdline != "/bin/sh/usr/sbin/mwan3track${interface}" ]; then
+ echo "down"
+ return
fi
- echo "$tracking"
+ readfile started $MWAN3TRACK_STATUS_DIR/$interface/STARTED
+ case "$started" in
+ 0)
+ echo "paused"
+ ;;
+ 1)
+ echo "active"
+ ;;
+ *)
+ echo "down"
+ ;;
+ esac
}
mwan3_init()
LOG info "Detect ifup event on interface ${INTERFACE} (${DEVICE})"
IFDOWN_EVENT=0
IFUP_EVENT=1
- STARTED=1
+ started
stop_subprocs
}
disabled() {
STATUS='disabled'
echo "disabled" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
- STARTED=0
+ stopped
}
firstconnect() {
LOG debug "firstconnect: called on $INTERFACE/$true_iface ($DEVICE). Status is $STATUS. SRC_IP is $SRC_IP"
- STARTED=1
+ started
if [ "$STATUS" = "offline" ]; then
disconnected 1
else
fi
}
+stopped() {
+ STARTED=0
+ echo 0 > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STARTED
+}
+
+started() {
+ STARTED=1
+ echo 1 > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STARTED
+}
+
update_status() {
local track_ip=$1
INTERFACE=$1
STATUS=""
- STARTED=0
+ mkdir -p $MWAN3TRACK_STATUS_DIR/$INTERFACE
+ echo $$ > $MWAN3TRACK_STATUS_DIR/$INTERFACE/PID
+ stopped
TRACK_OUTPUT=$MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_OUTPUT
mwan3_init
- mkdir -p $MWAN3TRACK_STATUS_DIR/$INTERFACE
-
trap clean_up TERM
trap if_down USR1
trap if_up USR2